<html>
<head><meta charset="utf-8"><title>design meeting 2019-11-08 · t-compiler · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/index.html">t-compiler</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html">design meeting 2019-11-08</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="180236412"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180236412" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180236412">(Nov 08 2019 at 14:54)</a>:</h4>
<p>Hey <span class="user-group-mention" data-user-group-id="897">@T-compiler/meeting</span> -- design meeting in <strong>7 minutes</strong>. </p>
<p>The topic for the day will be a <a href="https://hackmd.io/@39Qr_z9cQhasi25sGjmFnA/Skvd9rztS" target="_blank" title="https://hackmd.io/@39Qr_z9cQhasi25sGjmFnA/Skvd9rztS">proposal for a unified dataflow framework</a>, and there is a <a href="https://paper.dropbox.com/doc/Unified-Dataflow-Framework-Meeting-Agenda--AoNcLajntWguYCtNX24foSRVAg-6pHEscQ9H696tawihH2nE" target="_blank" title="https://paper.dropbox.com/doc/Unified-Dataflow-Framework-Meeting-Agenda--AoNcLajntWguYCtNX24foSRVAg-6pHEscQ9H696tawihH2nE">rough agenda</a> thoughtfully prepared by <span class="user-mention" data-user-id="118594">@ecstatic-morse</span>.</p>
<p>This is <a href="https://github.com/rust-lang/compiler-team/issues/202" target="_blank" title="https://github.com/rust-lang/compiler-team/issues/202">compiler-team#202</a>.</p>



<a name="180236424"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180236424" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180236424">(Nov 08 2019 at 14:54)</a>:</h4>
<p>OK, 6 minutes now.</p>



<a name="180236432"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180236432" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180236432">(Nov 08 2019 at 14:54)</a>:</h4>
<p>Please <span aria-label="wave" class="emoji emoji-1f44b" role="img" title="wave">:wave:</span> to show you're here =)</p>



<a name="180236454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180236454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180236454">(Nov 08 2019 at 14:55)</a>:</h4>
<p>In the meantime, feel free to post</p>
<h1>Announcements</h1>



<a name="180236839"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180236839" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180236839">(Nov 08 2019 at 14:58)</a>:</h4>
<p>- Splitting libsyntax is nearly done, <a href="https://github.com/rust-lang/rust/pull/65324" target="_blank" title="https://github.com/rust-lang/rust/pull/65324">https://github.com/rust-lang/rust/pull/65324</a></p>



<a name="180237026"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237026" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237026">(Nov 08 2019 at 15:00)</a>:</h4>
<p>- Would like y'all's opinion on moving the error codes into a new crate <code>librustc_error_codes</code> (in a way that should improve incremental rather than pessimizing), and then perhaps moving things eventually into <code>.md</code> files or something (potentially for internationalization) -- <a href="https://github.com/rust-lang/rust/issues/66210" target="_blank" title="https://github.com/rust-lang/rust/issues/66210">https://github.com/rust-lang/rust/issues/66210</a></p>



<a name="180237502"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237502" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237502">(Nov 08 2019 at 15:05)</a>:</h4>
<p>OK, 5 minutes in -- do we expect <span class="user-mention" data-user-id="119009">@eddyb</span> or <span class="user-mention" data-user-id="124288">@oli</span> to make it?</p>



<a name="180237510"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237510" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237510">(Nov 08 2019 at 15:05)</a>:</h4>
<p>Or <span class="user-mention" data-user-id="123586">@nagisa</span></p>



<a name="180237576"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237576" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237576">(Nov 08 2019 at 15:06)</a>:</h4>
<p>I think we could get started, in any case</p>



<a name="180237652"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237652" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237652">(Nov 08 2019 at 15:07)</a>:</h4>
<p>all right, <span class="user-mention" data-user-id="118594">@ecstatic-morse</span>, do you want me to try and "drive" based on your agenda?</p>



<a name="180237662"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237662" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237662">(Nov 08 2019 at 15:07)</a>:</h4>
<p>you can also drive if you like</p>



<a name="180237677"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237677" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237677">(Nov 08 2019 at 15:07)</a>:</h4>
<p>er, wait, you're commenting in the wrong topic :)</p>



<a name="180237681"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237681" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237681">(Nov 08 2019 at 15:07)</a>:</h4>
<p>Yes that'd be good. I'll just chime in. We should start with the background.</p>



<a name="180237694"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237694" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237694">(Nov 08 2019 at 15:07)</a>:</h4>
<p>You saw nothing!</p>



<a name="180237699"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237699" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237699">(Nov 08 2019 at 15:07)</a>:</h4>
<p>ok, let's do it</p>
<h1>background :)</h1>



<a name="180237718"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237718" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237718">(Nov 08 2019 at 15:07)</a>:</h4>
<p>/me drives <span aria-label="racecar" class="emoji emoji-1f3ce" role="img" title="racecar">:racecar:</span></p>



<a name="180237766"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237766" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237766">(Nov 08 2019 at 15:08)</a>:</h4>
<p>For background, doing const-qualification on complex MIR bodies required a dataflow framework that was slightly more powerful than the current one, which only allowed gen/kill problems</p>



<a name="180237793"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237793" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237793">(Nov 08 2019 at 15:08)</a>:</h4>
<p>In particular, it is still moving sets around, but it sometimes has a transfer function that is more complex than can be captured in a gen/kill set structure?</p>



<a name="180237798"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237798" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237798">(Nov 08 2019 at 15:08)</a>:</h4>
<p>Those can't handle assignments, so we couldn't propagate qualifs across them.</p>



<a name="180237828"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237828" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237828">(Nov 08 2019 at 15:09)</a>:</h4>
<p>Correct. So I implemented a new framework in <a href="https://github.com/rust-lang/rust/issues/64566" target="_blank" title="https://github.com/rust-lang/rust/issues/64566">#64566</a> that allowed for <code>Fn(&amp;mut State)</code> transfer functions</p>



<a name="180237862"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237862" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237862">(Nov 08 2019 at 15:09)</a>:</h4>
<p>It will converge slower, because you cannot coalesce transfer functions for a whole basic block as you can with a pure gen/kill transfer functions</p>



<a name="180237931"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237931" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237931">(Nov 08 2019 at 15:10)</a>:</h4>
<p>that is exactly what I was about to ask</p>



<a name="180237960"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237960" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237960">(Nov 08 2019 at 15:10)</a>:</h4>
<p>is there some way to support both?</p>



<a name="180237976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237976">(Nov 08 2019 at 15:10)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/issues/64470" target="_blank" title="https://github.com/rust-lang/rust/issues/64470">#64470</a> was then implemented, and the perf impacts are pretty negligible</p>



<a name="180237983"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237983" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237983">(Nov 08 2019 at 15:10)</a>:</h4>
<p>i.e. for an analysis that <em>is</em> a gen-kill analysis, support coalescing the transfer-function?</p>



<a name="180237993"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180237993" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180237993">(Nov 08 2019 at 15:10)</a>:</h4>
<p>(I presume that's partly what the motivation for this meeting is about?)</p>



<a name="180238020"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238020" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238020">(Nov 08 2019 at 15:11)</a>:</h4>
<blockquote>
<p><a href="https://github.com/rust-lang/rust/issues/64470" target="_blank" title="https://github.com/rust-lang/rust/issues/64470">#64470</a> was then implemented, and the perf impacts are pretty negligible</p>
</blockquote>
<p>wait can you elaborate on this</p>



<a name="180238026"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238026" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238026">(Nov 08 2019 at 15:11)</a>:</h4>
<p>Yes, the prototype accomplishes this using an adapter type</p>



<a name="180238030"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238030" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238030">(Nov 08 2019 at 15:11)</a>:</h4>
<p>perf impacts comparing what to what?</p>



<a name="180238044"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238044" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238044">(Nov 08 2019 at 15:11)</a>:</h4>
<p>like, the older system was using the old dataflow system for const qualification specifically?</p>



<a name="180238060"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238060" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238060">(Nov 08 2019 at 15:11)</a>:</h4>
<p>and the new system is using the newer framework</p>



<a name="180238071"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238071" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238071">(Nov 08 2019 at 15:11)</a>:</h4>
<p>(right?)</p>



<a name="180238077"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238077" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238077">(Nov 08 2019 at 15:11)</a>:</h4>
<p>No, the old system was using <em>no</em> dataflow (it didn't support branches)</p>



<a name="180238144"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238144" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238144">(Nov 08 2019 at 15:12)</a>:</h4>
<p>OK, good, I was a bit surprised to hear that it used the dataflow framework :)</p>



<a name="180238158"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238158" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238158">(Nov 08 2019 at 15:12)</a>:</h4>
<p>I was like "hmm I'm out of date, well, I better not admit I don't know how it works" ;)</p>



<a name="180238170"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238170" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238170">(Nov 08 2019 at 15:12)</a>:</h4>
<p>And compile times were not destroyed after we added the new dataflow-based one on top of the existing analysis</p>



<a name="180238191"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238191" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238191">(Nov 08 2019 at 15:12)</a>:</h4>
<p>ok, so the add'l cost of the new analysis was small</p>



<a name="180238195"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238195" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238195">(Nov 08 2019 at 15:12)</a>:</h4>
<p>(we're now working to remove the old one)</p>



<a name="180238230"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238230" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238230">(Nov 08 2019 at 15:13)</a>:</h4>
<p>this analysis runs on all MIR...?</p>



<a name="180238237"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238237" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238237">(Nov 08 2019 at 15:13)</a>:</h4>
<p>Yes, but it's because it only ever runs on consts. We still need to coalesce block transfer functions. It's very important</p>



<a name="180238245"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238245" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238245">(Nov 08 2019 at 15:13)</a>:</h4>
<p>ok</p>



<a name="180238276"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238276" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238276">(Nov 08 2019 at 15:13)</a>:</h4>
<p>Am I correct in inferring that we do not yet have data on the time-overhead from switching any particular analysis from the old dataflow to the new dataflow ?</p>



<a name="180238288"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238288" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238288">(Nov 08 2019 at 15:13)</a>:</h4>
<p>(Ah, right, this is const <em>validation</em>, not <em>qualification</em>)</p>



<a name="180238343"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238343" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238343">(Nov 08 2019 at 15:14)</a>:</h4>
<blockquote>
<p>Am I correct in inferring that we do not yet have data on the time-overhead from switching any particular analysis from the old dataflow to the new dataflow ?</p>
</blockquote>
<p>Correct</p>



<a name="180238344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238344">(Nov 08 2019 at 15:14)</a>:</h4>
<p>i.e. the new dataflow was solely used for the new analysis; not for porting any of the old ones?</p>



<a name="180238360"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238360" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238360">(Nov 08 2019 at 15:14)</a>:</h4>
<p>okay thanks</p>



<a name="180238471"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238471" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238471">(Nov 08 2019 at 15:15)</a>:</h4>
<p>So the prototype framework handles this by having two constructors for a single <code>Engine</code> type. Each constructor creates an adapter, one of which holds cached block transfer functions, and each of the adapters implements the <code>BlockEffects</code> trait.</p>



<a name="180238477"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238477" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238477">(Nov 08 2019 at 15:15)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/pull/65672/files#diff-3178a84d77e986f6ef17ef4ff334f111R358" target="_blank" title="https://github.com/rust-lang/rust/pull/65672/files#diff-3178a84d77e986f6ef17ef4ff334f111R358">https://github.com/rust-lang/rust/pull/65672/files#diff-3178a84d77e986f6ef17ef4ff334f111R358</a></p>



<a name="180238494"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238494" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238494">(Nov 08 2019 at 15:15)</a>:</h4>
<p>Actually, I'm sorry I'm getting ahead of myself</p>



<a name="180238499"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238499" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238499">(Nov 08 2019 at 15:15)</a>:</h4>
<p>Wait, one sec, so, back to the narative maybe? we had:</p>
<ul>
<li>created a new, more general but less optimized framework</li>
<li>used it for const qualification and then validation, seems reasonably fast so far</li>
</ul>



<a name="180238598"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238598" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238598">(Nov 08 2019 at 15:16)</a>:</h4>
<p>This is correct. The downside is that there's now a bunch of code that could be shared, especially graphviz debugging, that is replicated</p>



<a name="180238695"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238695" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238695">(Nov 08 2019 at 15:18)</a>:</h4>
<p>So my immediate thought was to have a single "dataflow engine" that would coalesce transfer functions if possible, and replace <em>both</em> frameworks</p>



<a name="180238755"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238755" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238755">(Nov 08 2019 at 15:18)</a>:</h4>
<blockquote>
<p>Yes, the prototype accomplishes this using an adapter type</p>
</blockquote>
<p>the "adapter type" you reference here: is that the sub-trait <code>pub trait GenKillAnalysis&lt;'tcx&gt;: Analysis&lt;'tcx&gt; { ... }</code> in your hackmd?</p>



<a name="180238838"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238838" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238838">(Nov 08 2019 at 15:19)</a>:</h4>
<blockquote>
<blockquote>
<p>Yes, the prototype accomplishes this using an adapter type</p>
</blockquote>
<p>the "adapter type" you reference here: is that the sub-trait <code>pub trait GenKillAnalysis&lt;'tcx&gt;: Analysis&lt;'tcx&gt; { ..&gt; }</code> in your hackmd?</p>
</blockquote>
<p>It's actually a struct that wraps a <code>GenKillAnalysis</code> and also stores an <code>IndexVec&lt;BasicBlock, GenKillSet&gt;</code></p>



<a name="180238841"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238841" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238841">(Nov 08 2019 at 15:19)</a>:</h4>
<p>this is a basic question, but what does const qualification do vs validation?</p>



<a name="180238860"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238860" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238860">(Nov 08 2019 at 15:19)</a>:</h4>
<p>I didn't see qualification explicitly mentioned in the design doc</p>



<a name="180238879"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238879" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238879">(Nov 08 2019 at 15:19)</a>:</h4>
<p>is this the best reference: <a href="https://github.com/rust-lang/rust/issues/53819" target="_blank" title="https://github.com/rust-lang/rust/issues/53819">https://github.com/rust-lang/rust/issues/53819</a> ?</p>



<a name="180238912"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180238912" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180238912">(Nov 08 2019 at 15:19)</a>:</h4>
<blockquote>
<p>this is a basic question, but what does const qualification do vs validation?</p>
</blockquote>
<p>No one knows XD. I call "qualification" the part that tracks <code>NeedsDrop</code> and <code>HasMutInterior</code> inside a const body</p>



<a name="180239008"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239008" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239008">(Nov 08 2019 at 15:20)</a>:</h4>
<p>While "validation" (which i now call const-checking to avoid conflict with MIRI's validation) checks for calls to non-const fn etc.</p>



<a name="180239044"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239044" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239044">(Nov 08 2019 at 15:20)</a>:</h4>
<p>in terms of the <strong>intention</strong>, the idea is this:</p>



<a name="180239057"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239057" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239057">(Nov 08 2019 at 15:20)</a>:</h4>
<ul>
<li>qualification: scrapes normal code looking for things to promote to constants</li>
</ul>



<a name="180239076"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239076" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239076">(Nov 08 2019 at 15:21)</a>:</h4>
<ul>
<li>validation: looks at things declared as constant and makes sure they don't do anything constants shouldn't do</li>
</ul>



<a name="180239095"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239095" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239095">(Nov 08 2019 at 15:21)</a>:</h4>
<p>(I think?)</p>



<a name="180239107"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239107" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239107">(Nov 08 2019 at 15:21)</a>:</h4>
<p>maybe I'm confused too :)</p>



<a name="180239120"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239120" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239120">(Nov 08 2019 at 15:21)</a>:</h4>
<p>okay, great <span aria-label="+1" class="emoji emoji-1f44d" role="img" title="+1">:+1:</span></p>



<a name="180239124"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239124" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239124">(Nov 08 2019 at 15:21)</a>:</h4>
<p>in other words "validation" is ensuring "const safety/soundness" as in <a href="https://www.ralfj.de/blog/2018/07/19/const.html" target="_blank" title="https://www.ralfj.de/blog/2018/07/19/const.html">https://www.ralfj.de/blog/2018/07/19/const.html</a> (?)</p>



<a name="180239221"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239221" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239221">(Nov 08 2019 at 15:22)</a>:</h4>
<p>(to the extent we've agreed on that approach, seems right)</p>



<a name="180239247"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239247" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239247">(Nov 08 2019 at 15:22)</a>:</h4>
<p>My plan was to write this up for the rustc guide after I finish replacing the old qualification logic</p>



<a name="180239256"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239256" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239256">(Nov 08 2019 at 15:22)</a>:</h4>
<p>(time check, 22 minutes in)</p>



<a name="180239270"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239270" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239270">(Nov 08 2019 at 15:22)</a>:</h4>
<p>But we're getting too far afield</p>



<a name="180239284"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239284" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239284">(Nov 08 2019 at 15:22)</a>:</h4>
<p>Next heading niko?</p>



<a name="180239290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239290">(Nov 08 2019 at 15:22)</a>:</h4>
<p>/me takes wheel</p>



<a name="180239305"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239305" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239305">(Nov 08 2019 at 15:23)</a>:</h4>
<blockquote>
<p>My plan was to write this up for the rustc guide after I finish replacing the old qualification logic</p>
</blockquote>
<p><span aria-label="tada" class="emoji emoji-1f389" role="img" title="tada">:tada:</span>  -- if this could include "dataflow for dummies" for some toy problem that would be sweet</p>



<a name="180239334"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239334" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239334">(Nov 08 2019 at 15:23)</a>:</h4>
<p>heh, I was going to say that let's turn a bit to discuss the plan for merging</p>



<a name="180239337"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239337" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239337">(Nov 08 2019 at 15:23)</a>:</h4>
<p>I think we all agree that:</p>



<a name="180239342"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239342" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239342">(Nov 08 2019 at 15:23)</a>:</h4>
<ul>
<li>DRY is better</li>
</ul>



<a name="180239354"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239354" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239354">(Nov 08 2019 at 15:23)</a>:</h4>
<ul>
<li>but the optimizations from gen/kill are imp't</li>
</ul>



<a name="180239363"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239363" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239363">(Nov 08 2019 at 15:23)</a>:</h4>
<p>it might be worth explaining a bit more about those</p>



<a name="180239367"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239367" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239367">(Nov 08 2019 at 15:23)</a>:</h4>
<p>I can take a stab</p>



<a name="180239441"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239441" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239441">(Nov 08 2019 at 15:24)</a>:</h4>
<p>in MIR, you have a basic block like</p>
<div class="codehilite"><pre><span></span>BB {
   statement 1;
   ...
   statement N;
}
</pre></div>



<a name="180239452"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239452" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239452">(Nov 08 2019 at 15:24)</a>:</h4>
<p>each one has some "effect" on the thing you are computing -- e.g., which variables are live</p>



<a name="180239462"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239462" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239462">(Nov 08 2019 at 15:24)</a>:</h4>
<p>in a gen/kill set, you express that effect as "things to add to the set" (gen) and "things to take away" (kill)</p>



<a name="180239469"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239469" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239469">(Nov 08 2019 at 15:24)</a>:</h4>
<p>the neat thing about this is that it's entirely independent of the old value of the set</p>



<a name="180239488"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239488" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239488">(Nov 08 2019 at 15:24)</a>:</h4>
<p>so you can compute it once for each basic block and kind of "coallesce" this into a gen/kill set for the whole block</p>



<a name="180239544"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239544" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239544">(Nov 08 2019 at 15:25)</a>:</h4>
<p>then to compute the final values, you can compute the set on entry to the block, apply the gen/kill set for the block as a whole to that set, and that gives you the result on exit from the block</p>



<a name="180239548"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239548" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239548">(Nov 08 2019 at 15:25)</a>:</h4>
<p>then you propagate until a fixed point across all the basic block boundaries</p>



<a name="180239561"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239561" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239561">(Nov 08 2019 at 15:25)</a>:</h4>
<p>now you know the values at the edges of each basic block, but you don't know the values for individual statements</p>



<a name="180239566"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239566" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239566">(Nov 08 2019 at 15:25)</a>:</h4>
<p>for those you have to step in and "re-apply" the gen/kill set for each statement in turn</p>



<a name="180239587"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239587" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239587">(Nov 08 2019 at 15:26)</a>:</h4>
<blockquote>
<p>each one has some "effect" on the thing you are computing -- e.g., which variables are live</p>
</blockquote>
<p>maybe a bad example, as liveness is a backwards flow analysis and our framework doesn't support that yet...</p>



<a name="180239648"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239648" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239648">(Nov 08 2019 at 15:26)</a>:</h4>
<p>anyway, the more general function approach isn't necessarily "coallescable" in this way,</p>



<a name="180239661"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239661" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239661">(Nov 08 2019 at 15:26)</a>:</h4>
<p>so in that case if the set at the entry to a block changes,</p>



<a name="180239681"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239681" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239681">(Nov 08 2019 at 15:26)</a>:</h4>
<p>you have to walk through each statement in turn</p>



<a name="180239683"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239683" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239683">(Nov 08 2019 at 15:26)</a>:</h4>
<p>to get the result at the exit</p>



<a name="180239686"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239686" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239686">(Nov 08 2019 at 15:26)</a>:</h4>
<p>that's obviously more work</p>



<a name="180239720"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239720" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239720">(Nov 08 2019 at 15:27)</a>:</h4>
<p>(seems about right? anything I missed or got wrong?)</p>



<a name="180239742"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239742" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239742">(Nov 08 2019 at 15:27)</a>:</h4>
<p>sounds right to me</p>



<a name="180239745"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239745" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239745">(Nov 08 2019 at 15:27)</a>:</h4>
<p>All correct</p>



<a name="180239749"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239749" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239749">(Nov 08 2019 at 15:27)</a>:</h4>
<p>so the trick is</p>



<a name="180239751"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239751" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239751">(Nov 08 2019 at 15:27)</a>:</h4>
<p>we want to permit the general functions</p>



<a name="180239754"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239754" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239754">(Nov 08 2019 at 15:27)</a>:</h4>
<p>but recognize the special cases</p>



<a name="180239763"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239763" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239763">(Nov 08 2019 at 15:27)</a>:</h4>
<p>I guess just the one special case</p>



<a name="180239778"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239778" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239778">(Nov 08 2019 at 15:27)</a>:</h4>
<p>it's also just nicer if you have express your fn in terms of gen/kill to write it that way</p>



<a name="180239781"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239781" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239781">(Nov 08 2019 at 15:27)</a>:</h4>
<p>(more DRY)</p>



<a name="180239785"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239785" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239785">(Nov 08 2019 at 15:27)</a>:</h4>
<p>One thing I want to mention before we get into how we go about this.</p>



<a name="180239856"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239856" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239856">(Nov 08 2019 at 15:28)</a>:</h4>
<p>Right now there's exactly one consumer of the "generic" framework, which is const qualification</p>



<a name="180239937"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239937" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239937">(Nov 08 2019 at 15:29)</a>:</h4>
<p>(is there more?)</p>



<a name="180239942"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239942" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239942">(Nov 08 2019 at 15:29)</a>:</h4>
<p>So the second point on the agenda was: do we want to work on implementing a more powerful framework (datafrog, something with arbitrary dataflow lattices) which would unlock other optimizations</p>



<a name="180239954"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239954" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239954">(Nov 08 2019 at 15:29)</a>:</h4>
<p>(slow typer)</p>



<a name="180239959"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180239959" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180239959">(Nov 08 2019 at 15:29)</a>:</h4>
<p>hmm</p>



<a name="180240008"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240008" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240008">(Nov 08 2019 at 15:30)</a>:</h4>
<p>I have perhaps a slightly less grandiose question</p>



<a name="180240021"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240021" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240021">(Nov 08 2019 at 15:30)</a>:</h4>
<p>And port the const qualification to that?</p>



<a name="180240035"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240035" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240035">(Nov 08 2019 at 15:30)</a>:</h4>
<p>I did notice the new dataflow API still has the <code> fn apply_call_return_effect(</code> method</p>



<a name="180240063"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240063" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240063">(Nov 08 2019 at 15:30)</a>:</h4>
<p>rather than work on combining the two and having to split them up again when datafrog gets merged.</p>



<a name="180240068"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240068" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240068">(Nov 08 2019 at 15:30)</a>:</h4>
<p>back when we were designing the old dataflow, I think "we" (ariel, me, and probably nagisa and niko) all agreed that method was a nasty hack</p>



<a name="180240083"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240083" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240083">(Nov 08 2019 at 15:31)</a>:</h4>
<p>(a nasty hack I will take the blame for)</p>



<a name="180240092"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240092" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240092">(Nov 08 2019 at 15:31)</a>:</h4>
<p>my opinion is:</p>
<ul>
<li>I suspect datafrog would be awesome, but I think we should wait until polonius proves itself, and not let perfect be the enemy of the good</li>
<li>I think we should discuss how to merge the gen/kill sets into this new framework first</li>
</ul>



<a name="180240120"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240120" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240120">(Nov 08 2019 at 15:31)</a>:</h4>
<blockquote>
<p>I did notice the new dataflow API still has the <code> fn apply_call_return_effect(</code> method</p>
</blockquote>
<p>and yes that is a nasty hack :)</p>



<a name="180240128"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240128" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240128">(Nov 08 2019 at 15:31)</a>:</h4>
<p>I was curious whether you had looked into options for ... um. .. getting rid of it?</p>



<a name="180240145"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240145" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240145">(Nov 08 2019 at 15:31)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> a better example for gen/kill is "definitely initialized" and/or "maybe uninitialized" (they're the same analysis, just one is a negation of the other)</p>



<a name="180240225"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240225" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240225">(Nov 08 2019 at 15:32)</a>:</h4>
<p>Some background again, function calls always need to be at the end of a basic block, because they take one path if they unwind, and another if they return normally</p>



<a name="180240250"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240250" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240250">(Nov 08 2019 at 15:32)</a>:</h4>
<p>consider </p>
<div class="codehilite"><pre><span></span>BB1 {
    X = CALL(...) goto BB2 unwind BB3
}
</pre></div>



<a name="180240262"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240262" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240262">(Nov 08 2019 at 15:32)</a>:</h4>
<p><code>apply_call_return_effect</code> is called only if  a function returns successfully, not if it panics</p>



<a name="180240265"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240265" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240265">(Nov 08 2019 at 15:33)</a>:</h4>
<p>Here, when you enter BB2 (no unwinding), X is initialized</p>



<a name="180240278"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240278" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240278">(Nov 08 2019 at 15:33)</a>:</h4>
<p>but when you enter BB3, it is not</p>



<a name="180240289"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240289" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240289">(Nov 08 2019 at 15:33)</a>:</h4>
<p>so you can't summarize the "effect" of that terminator in a uniform way</p>



<a name="180240291"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240291" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240291">(Nov 08 2019 at 15:33)</a>:</h4>
<p>right, and the effect on the bitset can differ between the two branches, right?</p>



<a name="180240295"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240295" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240295">(Nov 08 2019 at 15:33)</a>:</h4>
<p>its effect varies per the edge</p>



<a name="180240317"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240317" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240317">(Nov 08 2019 at 15:33)</a>:</h4>
<p>To answer your question <span class="user-mention" data-user-id="116083">@pnkfelix</span>, I didn't see a way to get rid of it.</p>



<a name="180240340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240340">(Nov 08 2019 at 15:33)</a>:</h4>
<p>I did make it more uniform with the other <code>effect</code> methods</p>



<a name="180240355"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240355" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240355">(Nov 08 2019 at 15:33)</a>:</h4>
<p>ah well. sobeit</p>



<a name="180240422"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240422" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240422">(Nov 08 2019 at 15:34)</a>:</h4>
<p>i.e. it is also resricted to a gen/kill set in the new <code>GenKillAnalysis</code>, while it is not in the old <code>BitDenotation</code> one</p>



<a name="180240429"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240429" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240429">(Nov 08 2019 at 15:34)</a>:</h4>
<blockquote>
<p>my opinion is:</p>
<ul>
<li>I suspect datafrog would be awesome, but I think we should wait until polonius proves itself, and not let perfect be the enemy of the good</li>
<li>I think we should discuss how to merge the gen/kill sets into this new framework first</li>
</ul>
</blockquote>
<p>I'm curious if others agree on this :) -- if so, maybe discuss that second bullet a bit?</p>



<a name="180240439"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240439" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240439">(Nov 08 2019 at 15:34)</a>:</h4>
<p>(this was fine because it always came at the end of a block)</p>



<a name="180240484"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240484" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240484">(Nov 08 2019 at 15:35)</a>:</h4>
<p><span class="user-mention" data-user-id="118594">@ecstatic-morse</span> oh btw since the new framework is a more general fixpoint iteration, do you know how hard it would be to replace the bitsets with arbitrary data?</p>



<a name="180240538"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240538" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240538">(Nov 08 2019 at 15:35)</a>:</h4>
<p>to let e.g. constant folding use it? or do you think it's pointless to do that w/o switching to, say, datafrog?</p>



<a name="180240615"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240615" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240615">(Nov 08 2019 at 15:36)</a>:</h4>
<p>@eddyb I think not hard. There's some question about how to define  the supertraits<code>GenKillAnalysis</code>, since it only works on bit vectors, not arbitrary lattices</p>



<a name="180240616"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240616" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240616">(Nov 08 2019 at 15:36)</a>:</h4>
<p>actually, time check, we're at 30 minutes, I'm wondering what's most imporant things to cover. In particular, I remember there was also some discussion of a "cursor-based" accessing API, for example.</p>



<a name="180240621"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240621" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240621">(Nov 08 2019 at 15:36)</a>:</h4>
<p>But I believe everything will work out.</p>



<a name="180240627"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240627" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240627">(Nov 08 2019 at 15:36)</a>:</h4>
<p>maybe we can summarize the things that remain and pick a direction?</p>



<a name="180240638"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240638" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240638">(Nov 08 2019 at 15:36)</a>:</h4>
<blockquote>
<p>i.e. it is also resricted to a gen/kill set in the new <code>GenKillAnalysis</code>, while it is not in the old <code>BitDenotation</code> one</p>
</blockquote>
<p>hmm. I just realized something, I think: So the more general analysis, the state <code>&amp;mut BitSet</code> it has access to ...</p>



<a name="180240647"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240647" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240647">(Nov 08 2019 at 15:36)</a>:</h4>
<p>in particular, I feel kind of like the gen/kill set thing is "just" a matter of programming -- the key thing is that we want to recover the optimization</p>



<a name="180240659"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240659" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240659">(Nov 08 2019 at 15:36)</a>:</h4>
<p>... that state must summarize more than just the current point in the control flow, right?</p>



<a name="180240694"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240694" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240694">(Nov 08 2019 at 15:37)</a>:</h4>
<p>i.e. you must be able to mutate the state for the two different branches of control flow for a terminator  (specifically <code>call</code> ) ?</p>



<a name="180240699"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240699" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240699">(Nov 08 2019 at 15:37)</a>:</h4>
<p><span class="user-mention" data-user-id="118594">@ecstatic-morse</span> I remember <span class="user-mention" data-user-id="123586">@nagisa</span> and maybe someone else tried to get something like that merged a while back but it never landed, might be good to look into what that tried to achieve and the path it took</p>



<a name="180240707"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240707" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240707">(Nov 08 2019 at 15:37)</a>:</h4>
<p>and therefore it must have access to the state for multiple blocks?</p>



<a name="180240784"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240784" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240784">(Nov 08 2019 at 15:38)</a>:</h4>
<p>(too many threads here:)</p>



<a name="180240793"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240793" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240793">(Nov 08 2019 at 15:38)</a>:</h4>
<blockquote>
<p>and therefore it must have access to the state for multiple blocks?</p>
</blockquote>
<p>let's start with this question that <span class="user-mention" data-user-id="116083">@pnkfelix</span> raised</p>



<a name="180240802"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240802" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240802">(Nov 08 2019 at 15:38)</a>:</h4>
<p><span class="user-mention" data-user-id="116083">@pnkfelix</span> The effect ends up in the entry set for both successors?</p>



<a name="180240821"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240821" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240821">(Nov 08 2019 at 15:38)</a>:</h4>
<p>(the unwind one and the successful return one)</p>



<a name="180240830"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240830" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240830">(Nov 08 2019 at 15:38)</a>:</h4>
<p>/me is being overwhelmed</p>



<a name="180240860"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240860" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240860">(Nov 08 2019 at 15:39)</a>:</h4>
<p>I thought the whole point of <code>apply_call_return_effect</code> is that it covers those effects that are specific to the "normal" return path</p>



<a name="180240862"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240862" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240862">(Nov 08 2019 at 15:39)</a>:</h4>
<p>Right, I'm starting with the assumption that it must be able to handle a non-uniform effect</p>



<a name="180240873"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240873" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240873">(Nov 08 2019 at 15:39)</a>:</h4>
<p>(and hence which do not apply to unwinding)</p>



<a name="180240895"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240895" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240895">(Nov 08 2019 at 15:39)</a>:</h4>
<p>I'm sorry, the <em>block</em> effect ends up in the entry set for both successors</p>



<a name="180240906"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240906" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240906">(Nov 08 2019 at 15:39)</a>:</h4>
<blockquote>
<p>i.e. it is also resricted to a gen/kill set in the new <code>GenKillAnalysis</code>, while it is not in the old <code>BitDenotation</code> one</p>
</blockquote>
<p>or no, hold on, I think I misunderstood the above comment</p>



<a name="180240969"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240969" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240969">(Nov 08 2019 at 15:40)</a>:</h4>
<p>While the success successor gets the block effect + call return effect</p>



<a name="180240976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180240976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180240976">(Nov 08 2019 at 15:40)</a>:</h4>
<p>I thought this meant that <code>apply_call_return_effect</code> was <em>only</em> present on the <code>GenKillAnalysis</code> trait</p>



<a name="180241000"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241000" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241000">(Nov 08 2019 at 15:40)</a>:</h4>
<p>I think we need to address <span class="user-mention" data-user-id="116009">@nikomatsakis</span> bullet points real quck</p>



<a name="180241007"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241007" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241007">(Nov 08 2019 at 15:40)</a>:</h4>
<p>but re-reading the <a href="http://hackmd.io" target="_blank" title="http://hackmd.io">hackmd.io</a> now, I see that even the general <code>Analysis</code> trait has that method. Sorry for the noise.</p>



<a name="180241011"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241011" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241011">(Nov 08 2019 at 15:40)</a>:</h4>
<p>Does anyone have thoughts on this?</p>



<a name="180241031"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241031" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241031">(Nov 08 2019 at 15:41)</a>:</h4>
<blockquote>
<blockquote>
<p>my opinion is:</p>
<ul>
<li>I suspect datafrog would be awesome, but I think we should wait until polonius proves itself, and not let perfect be the enemy of the good</li>
<li>I think we should discuss how to merge the gen/kill sets into this new framework first</li>
</ul>
</blockquote>
<p>I'm curious if others agree on this :) -- if so, maybe discuss that second bullet a bit?</p>
</blockquote>



<a name="180241049"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241049" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241049">(Nov 08 2019 at 15:41)</a>:</h4>
<p>that first bullet also applies to a more generalized, non-set-based analysis, imo</p>



<a name="180241091"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241091" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241091">(Nov 08 2019 at 15:41)</a>:</h4>
<p>Because the next thing to discuss are the particulars of the prototype implementation</p>



<a name="180241097"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241097" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241097">(Nov 08 2019 at 15:41)</a>:</h4>
<p>I think the sketch(es) from the hackmd on how to merge the gen/kill sets into this framework sounds fine to me.</p>



<a name="180241149"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241149" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241149">(Nov 08 2019 at 15:42)</a>:</h4>
<p>(there are slight variations on the idea, bu</p>



<a name="180241152"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241152" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241152">(Nov 08 2019 at 15:42)</a>:</h4>
<p>(I felt the same; it seemed like it would work)</p>



<a name="180241180"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241180" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241180">(Nov 08 2019 at 15:42)</a>:</h4>
<p>but the point is: It seems to be able to recover coalescing across a block.</p>



<a name="180241245"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241245" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241245">(Nov 08 2019 at 15:43)</a>:</h4>
<p>Correct, the prototype is not fundamentally less fast than <code>BitDenotation</code> for gen/kill problems</p>



<a name="180241252"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241252" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241252">(Nov 08 2019 at 15:43)</a>:</h4>
<p>does anyone have any estimate of how much work it would take to trial a datafrog version to compare them?</p>



<a name="180241271"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241271" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241271">(Nov 08 2019 at 15:43)</a>:</h4>
<p>without any data, it's hard to justify one approach over the other, apart from in ease of implementation</p>



<a name="180241287"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241287" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241287">(Nov 08 2019 at 15:43)</a>:</h4>
<blockquote>
<p>does anyone have any estimate of how much work it would take to trial a datafrog version to compare them?</p>
</blockquote>
<p>I'd have to think about it, it seems .. not entirely trivial to me</p>



<a name="180241297"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241297" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241297">(Nov 08 2019 at 15:43)</a>:</h4>
<p>well this seems close to being able to land. Datafrog would be a big leap I think.</p>



<a name="180241387"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241387" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241387">(Nov 08 2019 at 15:44)</a>:</h4>
<p>I definitely think datafrog should prove itself on polonius first</p>



<a name="180241396"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241396" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241396">(Nov 08 2019 at 15:44)</a>:</h4>
<p>and I say this as a massive proponent</p>



<a name="180241439"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241439" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241439">(Nov 08 2019 at 15:45)</a>:</h4>
<p>but e.g. right now polonius takes the CFG as a vector of tuples and so forth; we may find that is too slow, or needs to be refined, or there are OOM problems, etc</p>



<a name="180241442"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241442" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241442">(Nov 08 2019 at 15:45)</a>:</h4>
<p>In the interest of time, these are the list of small API decisions made by the prototype, phrased as questions<br>
      - How do we feel about the <code>{before_,}*_effect</code> naming convention? It takes a bit of getting used to, and doesn’t extend nicely to backwards dataflow.<br>
    - Should we be passing a <code>mir::Statement</code> to the <code>statement</code> effect methods? What about <code>mir::Body</code> to <code>bits_per_block</code>?<br>
    - Should we use specialization to implement this?’<br>
    - Should the <code>Analysis</code> methods take <code>&amp;self</code> or <code>&amp;mut self</code>?<br>
    - Are we okay with a <code>ResultsCursor</code> becoming the common way to inspect results?<br>
    - How do we implement a zipped <code>ResultsVisitor</code>?</p>



<a name="180241453"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241453" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241453">(Nov 08 2019 at 15:45)</a>:</h4>
<p>I'd rather we answer those in an experimental capacity</p>



<a name="180241466"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241466" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241466">(Nov 08 2019 at 15:45)</a>:</h4>
<p><a href="https://paper.dropbox.com/doc/Unified-Dataflow-Framework-Meeting-Agenda--AoNHyM8tWZVmfMj~Kkh0gZaTAg-6pHEscQ9H696tawihH2nE" target="_blank" title="https://paper.dropbox.com/doc/Unified-Dataflow-Framework-Meeting-Agenda--AoNHyM8tWZVmfMj~Kkh0gZaTAg-6pHEscQ9H696tawihH2nE">https://paper.dropbox.com/doc/Unified-Dataflow-Framework-Meeting-Agenda--AoNHyM8tWZVmfMj~Kkh0gZaTAg-6pHEscQ9H696tawihH2nE</a></p>



<a name="180241473"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241473" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241473">(Nov 08 2019 at 15:45)</a>:</h4>
<p>nice, I was about to make such a list</p>



<a name="180241475"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241475" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241475">(Nov 08 2019 at 15:45)</a>:</h4>
<p>(the third section)</p>



<a name="180241501"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241501" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241501">(Nov 08 2019 at 15:46)</a>:</h4>
<blockquote>
<p>I'd rather we answer those in an experimental capacity</p>
</blockquote>
<p>sorry, is this referring to the API decisions, or the stuff with polonius/datafrog?</p>



<a name="180241554"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241554" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241554">(Nov 08 2019 at 15:46)</a>:</h4>
<p>(datafrog)</p>



<a name="180241577"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241577" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241577">(Nov 08 2019 at 15:46)</a>:</h4>
<p>Is there anything that stands out to people? These could also be discussed on a PR, though. They're small.</p>



<a name="180241579"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241579" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241579">(Nov 08 2019 at 15:46)</a>:</h4>
<p>most of those API questions, though, don't seem <em>that</em> important --</p>



<a name="180241606"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241606" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241606">(Nov 08 2019 at 15:46)</a>:</h4>
<p>I personally would prefer avoiding using specialization to implement this, if we can help it</p>



<a name="180241623"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241623" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241623">(Nov 08 2019 at 15:46)</a>:</h4>
<p>Yes, I agree, but I don't even see what we would need it for</p>



<a name="180241650"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241650" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241650">(Nov 08 2019 at 15:47)</a>:</h4>
<p>But let's not get into it :P</p>



<a name="180241664"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241664" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241664">(Nov 08 2019 at 15:47)</a>:</h4>
<p>I think i'd like to briefly discuss the results cursor</p>



<a name="180241668"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241668" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241668">(Nov 08 2019 at 15:47)</a>:</h4>
<p>Okay, if we don't wanna discuss the details now, can we discuss extensions in the next section?</p>



<a name="180241702"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241702" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241702">(Nov 08 2019 at 15:47)</a>:</h4>
<p>the older approach basically used calbacks, right?</p>



<a name="180241721"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241721" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241721">(Nov 08 2019 at 15:47)</a>:</h4>
<p>i.e., you have some callback that gets invoked with the results at each point?</p>



<a name="180241731"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241731" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241731">(Nov 08 2019 at 15:48)</a>:</h4>
<p>Yep, it used a <code>Visitor</code> pattern</p>



<a name="180241775"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241775" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241775">(Nov 08 2019 at 15:48)</a>:</h4>
<p>I'm trying to remember</p>



<a name="180241784"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241784" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241784">(Nov 08 2019 at 15:48)</a>:</h4>
<p>Agreed re. specialization, except for perf, if hidden in a reasonable way (same policy as applies to standard library)</p>



<a name="180241795"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241795" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241795">(Nov 08 2019 at 15:48)</a>:</h4>
<p>I remember thinking that this cursor would be useful in borrow check</p>



<a name="180241814"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241814" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241814">(Nov 08 2019 at 15:48)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/blob/76ade3e8ac42cd7a7b7c3c5ef54818ab68e3ebdc/src/librustc_mir/dataflow/mod.rs#L309" target="_blank" title="https://github.com/rust-lang/rust/blob/76ade3e8ac42cd7a7b7c3c5ef54818ab68e3ebdc/src/librustc_mir/dataflow/mod.rs#L309">https://github.com/rust-lang/rust/blob/76ade3e8ac42cd7a7b7c3c5ef54818ab68e3ebdc/src/librustc_mir/dataflow/mod.rs#L309</a></p>



<a name="180241842"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241842" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241842">(Nov 08 2019 at 15:48)</a>:</h4>
<p>So I guess I mostly wanted to say that I'm a proponent of it -- I think it's useful primarily in error handling, where you might like to be able to jump back to a certain point to get results</p>



<a name="180241882"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241882" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241882">(Nov 08 2019 at 15:49)</a>:</h4>
<p>I think the callback system was in part to work around lack of StreamingIterator? But I'm not 100% sure</p>



<a name="180241892"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241892" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241892">(Nov 08 2019 at 15:49)</a>:</h4>
<blockquote>
<p>I remember thinking that this cursor would be useful in borrow check</p>
</blockquote>
<p>We have a cursor for <code>BitDenotation</code> as well, so we could talk more about improving this.</p>



<a name="180241912"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241912" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241912">(Nov 08 2019 at 15:49)</a>:</h4>
<p>Well, ok, so we're 50 minutes in -- my sense is that right now, there is a general consensus that we should do this, subject to experimental results?</p>



<a name="180241934"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180241934" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180241934">(Nov 08 2019 at 15:49)</a>:</h4>
<p>(I thnk we can discuss extensions, too, but I'd like to establish this point first)</p>



<a name="180242003"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242003" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242003">(Nov 08 2019 at 15:50)</a>:</h4>
<p>(further caveat, that we'll refine the details of the API in PRs)</p>



<a name="180242021"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242021" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242021">(Nov 08 2019 at 15:50)</a>:</h4>
<blockquote>
<p>there is a general consensus that we should do this, subject to experimental results?</p>
</blockquote>
<p>yeah, I think we should do this. But I would perhaps start by identifying the most expensive dataflow consumer,a nd porting them first</p>



<a name="180242035"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242035" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242035">(Nov 08 2019 at 15:50)</a>:</h4>
<p>expense here can be execution time or memory usage</p>



<a name="180242056"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242056" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242056">(Nov 08 2019 at 15:50)</a>:</h4>
<p>so... do both ...</p>



<a name="180242063"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242063" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242063">(Nov 08 2019 at 15:50)</a>:</h4>
<p>I think in particular we are also deciding that we should NOT try to port to some more general framework first</p>



<a name="180242067"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242067" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242067">(Nov 08 2019 at 15:50)</a>:</h4>
<p><span class="user-mention" data-user-id="116083">@pnkfelix</span> have any candidates in mind?</p>



<a name="180242080"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242080" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242080">(Nov 08 2019 at 15:50)</a>:</h4>
<p>I don't know offhand. I'm betting mir-borrowck</p>



<a name="180242081"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242081" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242081">(Nov 08 2019 at 15:51)</a>:</h4>
<p>(but not that we rule it out or anything of course)</p>



<a name="180242112"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242112" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242112">(Nov 08 2019 at 15:51)</a>:</h4>
<p>I used to have a lot of stats on this from profiling</p>



<a name="180242122"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242122" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242122">(Nov 08 2019 at 15:51)</a>:</h4>
<p>which of the borrowck analysis were most expensive</p>



<a name="180242133"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242133" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242133">(Nov 08 2019 at 15:51)</a>:</h4>
<p>should be easy enough to gather with the self-profile data</p>



<a name="180242285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242285">(Nov 08 2019 at 15:52)</a>:</h4>
<p>ok, should we discuss extensions?</p>



<a name="180242325"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242325" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242325">(Nov 08 2019 at 15:53)</a>:</h4>
<p>Is <span class="user-mention" data-user-id="124287">@mw</span> around?</p>



<a name="180242356"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242356" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242356">(Nov 08 2019 at 15:53)</a>:</h4>
<blockquote>
<p>For example, we could skip caching block transfer functions for dataflow analyses on acyclic MIR,</p>
</blockquote>
<p>Regarding extensions: I thought this (from the hackmd) was an interesting idea</p>



<a name="180242369"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242369" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242369">(Nov 08 2019 at 15:53)</a>:</h4>
<p>I am</p>



<a name="180242459"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242459" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242459">(Nov 08 2019 at 15:54)</a>:</h4>
<p>Do you remember what problems arose around dataflow when you tried to do extended basic blocks?</p>



<a name="180242492"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242492" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242492">(Nov 08 2019 at 15:54)</a>:</h4>
<p>I think this was years ago, sorry. I should have pinged you earlier but I didn't think we'd get this far</p>



<a name="180242526"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242526" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242526">(Nov 08 2019 at 15:54)</a>:</h4>
<p>this <a href="https://github.com/rust-lang/rust/issues/39685" target="_blank" title="https://github.com/rust-lang/rust/issues/39685">#39685</a> ?</p>



<a name="180242535"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242535" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242535">(Nov 08 2019 at 15:54)</a>:</h4>
<p>I'm pretty sure that was someone else</p>



<a name="180242552"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242552" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242552">(Nov 08 2019 at 15:54)</a>:</h4>
<p>I never did any major MIR work</p>



<a name="180242559"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242559" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242559">(Nov 08 2019 at 15:55)</a>:</h4>
<p>uhh, that's embarassing, sorry</p>



<a name="180242578"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242578" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242578">(Nov 08 2019 at 15:55)</a>:</h4>
<p>heh so</p>



<a name="180242581"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242581" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242581">(Nov 08 2019 at 15:55)</a>:</h4>
<p>yes that</p>



<a name="180242587"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242587" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242587">(Nov 08 2019 at 15:55)</a>:</h4>
<p>it seems like something that would exacerbate the call_return hack situation ...</p>



<a name="180242590"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242590" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242590">(Nov 08 2019 at 15:55)</a>:</h4>
<p>I think we're not going to do EBB</p>



<a name="180242593"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242593" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> mw <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242593">(Nov 08 2019 at 15:55)</a>:</h4>
<p>no worries :)</p>



<a name="180242651"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242651" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242651">(Nov 08 2019 at 15:55)</a>:</h4>
<p>I remember hearing that cranelift was backing away from EBB too? (cc <span class="user-mention" data-user-id="130125">@Dan Gohman</span>) but in any case seems far out</p>



<a name="180242716"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242716" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242716">(Nov 08 2019 at 15:56)</a>:</h4>
<blockquote>
<blockquote>
<p>For example, we could skip caching block transfer functions for dataflow analyses on acyclic MIR,</p>
</blockquote>
<p>Regarding extensions: I thought this (from the hackmd) was an interesting idea</p>
</blockquote>
<p>Yeah, this is quite easy, although it just saves peak memory usage</p>



<a name="180242743"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242743" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242743">(Nov 08 2019 at 15:56)</a>:</h4>
<p>"just" saves</p>



<a name="180242782"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242782" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242782">(Nov 08 2019 at 15:56)</a>:</h4>
<p>It's all about that perf.rlo icount XD</p>



<a name="180242798"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242798" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242798">(Nov 08 2019 at 15:57)</a>:</h4>
<blockquote>
<p>For example, we could skip caching block transfer functions for dataflow analyses on acyclic MIR,</p>
</blockquote>
<p>I agree this is interesting. There are also more general optimizations one can do -- e.g., recognizing patterns in the source (like loops, if/else-if branches) -- and optimizing around those. That's probably more complex than is worth it.</p>



<a name="180242822"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242822" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242822">(Nov 08 2019 at 15:57)</a>:</h4>
<p>But I've always wanted to write them.</p>



<a name="180242826"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242826" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242826">(Nov 08 2019 at 15:57)</a>:</h4>
<p>/me is a fan of looking at the perf.rlo max-rss</p>



<a name="180242969"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242969" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242969">(Nov 08 2019 at 15:58)</a>:</h4>
<blockquote>
<p>While results cursors are great for consumers of a dataflow analysis, they make some optimizations more difficult. To operate efficiently, they require that the full dataflow state at entry to each block is stored.</p>
</blockquote>



<a name="180242970"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180242970" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180242970">(Nov 08 2019 at 15:58)</a>:</h4>
<p>I was just noting that line from the doc</p>



<a name="180243002"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243002" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243002">(Nov 08 2019 at 15:58)</a>:</h4>
<p>I guess it seems relevant to the acyclic optimization</p>



<a name="180243056"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243056" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243056">(Nov 08 2019 at 15:59)</a>:</h4>
<p>Actually we would still have to store state at block entry for acyclic MIR in case there's branching</p>



<a name="180243063"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243063" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243063">(Nov 08 2019 at 15:59)</a>:</h4>
<p>That's more for EBB</p>



<a name="180243073"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243073" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243073">(Nov 08 2019 at 15:59)</a>:</h4>
<p>I was just going to ask where the reduction in peak-rss would come from</p>



<a name="180243155"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243155" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243155">(Nov 08 2019 at 16:00)</a>:</h4>
<p>from not storing the bitsets for basic blocks that you're not going to iterate on</p>



<a name="180243183"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243183" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243183">(Nov 08 2019 at 16:00)</a>:</h4>
<p>So normally for gen/kill problems, we build up the transfer functions ahead of time and store them separate from the entry sets</p>



<a name="180243191"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243191" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243191">(Nov 08 2019 at 16:00)</a>:</h4>
<p>but you still want them to read the results at the end?</p>



<a name="180243205"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243205" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243205">(Nov 08 2019 at 16:00)</a>:</h4>
<p>but ah yeah ok you don't have to store the gen/kill sets, sure</p>



<a name="180243208"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243208" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243208">(Nov 08 2019 at 16:00)</a>:</h4>
<p>nah you recompute them</p>



<a name="180243226"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243226" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243226">(Nov 08 2019 at 16:00)</a>:</h4>
<p>that .. doesn't sound right</p>



<a name="180243278"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243278" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> pnkfelix <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243278">(Nov 08 2019 at 16:01)</a>:</h4>
<p>this is all based on an assumption that the fixed-point iteration is the big cost in time</p>



<a name="180243279"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243279" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243279">(Nov 08 2019 at 16:01)</a>:</h4>
<p>well anyway</p>



<a name="180243290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243290">(Nov 08 2019 at 16:01)</a>:</h4>
<p>But since you would only have to apply each block effect once for acyclic MIR, why store them?</p>



<a name="180243299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243299">(Nov 08 2019 at 16:01)</a>:</h4>
<p>OK, so, we're at 60 minutes :)</p>



<a name="180243407"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243407" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243407">(Nov 08 2019 at 16:02)</a>:</h4>
<p>I think it's fine to keep chatting, but I'd like to request two things:</p>



<a name="180243479"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243479" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243479">(Nov 08 2019 at 16:03)</a>:</h4>
<ul>
<li><span class="user-mention" data-user-id="118594">@ecstatic-morse</span> can you make a PR against the compiler-team repo (the <a href="https://github.com/rust-lang/compiler-team/tree/master/content/minutes/design-meeting" target="_blank" title="https://github.com/rust-lang/compiler-team/tree/master/content/minutes/design-meeting">design-meetings minutes directory</a>) that adds your initial notes, along with a link to this zulip thread? I think we didn't really add that much to the notes you had prepared in advance? but feel free to edit/update</li>
</ul>



<a name="180243494"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243494" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243494">(Nov 08 2019 at 16:03)</a>:</h4>
<ul>
<li>uh that might be the only thing</li>
</ul>



<a name="180243515"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243515" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243515">(Nov 08 2019 at 16:03)</a>:</h4>
<p>I guess I'd be happy to see an inside rust blog post if you wanted to write one :)</p>



<a name="180243519"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243519" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243519">(Nov 08 2019 at 16:03)</a>:</h4>
<p>but I don't think it's required</p>



<a name="180243574"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243574" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243574">(Nov 08 2019 at 16:04)</a>:</h4>
<p>this is interesting stuff though and people might like to hear about it, and you've got the raw material...</p>



<a name="180243585"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243585" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243585">(Nov 08 2019 at 16:04)</a>:</h4>
<blockquote>
<ul>
<li><span class="user-mention silent" data-user-id="118594">ecstatic-morse</span> can you make a PR against the compiler-team repo (the <a href="https://github.com/rust-lang/compiler-team/tree/master/content/minutes/design-meeting" target="_blank" title="https://github.com/rust-lang/compiler-team/tree/master/content/minutes/design-meeting">design-meetings minutes directory</a>) that adds your initial notes, along with a link to this zulip thread? I think we didn't really add that much to the notes you had prepared in advance? but feel free to edit/update</li>
</ul>
</blockquote>
<p>Sounds good. It seems like we've decided to pursue this, so I'll add that to the summary.</p>



<a name="180243618"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243618" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243618">(Nov 08 2019 at 16:04)</a>:</h4>
<p>OK, thanks all! <span aria-label="heart" class="emoji emoji-2764" role="img" title="heart">:heart:</span></p>



<a name="180243695"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180243695" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180243695">(Nov 08 2019 at 16:05)</a>:</h4>
<p>Oh, and feel free to ask questions here or in another channel, but I'll be unavailable until later today.</p>



<a name="180247773"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180247773" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180247773">(Nov 08 2019 at 16:45)</a>:</h4>
<p><span class="user-mention" data-user-id="118594">@ecstatic-morse</span> EBBs was <span class="user-mention" data-user-id="116122">@simulacrum</span> if I'm not mistaken</p>



<a name="180247793"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180247793" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> simulacrum <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180247793">(Nov 08 2019 at 16:45)</a>:</h4>
<p>Indeed, yes</p>



<a name="180247808"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180247808" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180247808">(Nov 08 2019 at 16:46)</a>:</h4>
<p>and the problem was that several things, including dataflow, have to work on BBs fundamentally</p>



<a name="180247982"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180247982" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180247982">(Nov 08 2019 at 16:47)</a>:</h4>
<p>or maybe they could handle EBBs by replacing per-BB data with per-edge data, but there are at least as many edges as there are BBs, so you're likely to lose perf some way or another</p>



<a name="180248083"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180248083" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> eddyb <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180248083">(Nov 08 2019 at 16:48)</a>:</h4>
<p>and overall it's significant effort to make all of those things work</p>



<a name="180266126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180266126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180266126">(Nov 08 2019 at 20:02)</a>:</h4>
<p>dataflow can easily work with data that’s as fine as statements, the downside is not performance but memory</p>



<a name="180266147"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180266147" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180266147">(Nov 08 2019 at 20:02)</a>:</h4>
<p>BB makes it possible to remember less and recompute more as needed.</p>



<a name="180266162"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180266162" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180266162">(Nov 08 2019 at 20:02)</a>:</h4>
<p>so if anything tying dataflow with basic blocks will make things slower.</p>



<a name="180266635"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180266635" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nagisa <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180266635">(Nov 08 2019 at 20:05)</a>:</h4>
<blockquote>
<p><span class="user-mention silent" data-user-id="118594">ecstatic-morse</span> I remember <span class="user-mention silent" data-user-id="123586">nagisa</span> and maybe someone else tried to get something like that merged a while back but it never landed, might be good to look into what that tried to achieve and the path it took</p>
</blockquote>
<p>My original work did not land because I made a critical mistake of trying to land too many things in one go: a framework and a bunch of optimisations. Some of those optimisations ended up depending on stuff that didn’t exist and still does not exist to this day AFAIK (aliasing analysis)</p>



<a name="180282136"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180282136" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180282136">(Nov 08 2019 at 23:13)</a>:</h4>
<p><span class="user-mention" data-user-id="119009">@eddyb</span> I don't see any fundamental issues with EBBs and dataflow. Like you said, we would keep a cached block transfer function per-edge rather than per-block. I don't think we'll end up using any more memory, since each extra block after a function call gets replaced by an unwind edge.</p>



<a name="180282353"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180282353" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Dylan MacKenzie (ecstatic-morse) <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180282353">(Nov 08 2019 at 23:15)</a>:</h4>
<p><span class="user-mention" data-user-id="123586">@nagisa</span> The prototype we discussed at the meeting does not have that problem. If anything, it's the opposite: it doesn't enable anything new and interesting, just cleans up code a bit. I would like to look into supporting arbitrary lattices soonish. I'll probably want to ask you some questions before I start on that. I still need to really sit down with your PRs.</p>



<a name="180412325"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180412325" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180412325">(Nov 11 2019 at 10:32)</a>:</h4>
<p>cranelift did indeed move away from EBBs back to BBs, and their rationale was explained <a href="https://github.com/CraneStation/cranelift/issues/796" target="_blank" title="https://github.com/CraneStation/cranelift/issues/796">in this issue</a> — some of those reasons can apply to our case (and, unfortunately, to (R)VSDGs)</p>



<a name="180523070"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180523070" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180523070">(Nov 12 2019 at 14:46)</a>:</h4>
<p>Yeah, I think the main motivation was the "unwind" edge from calls. Doesn't seem worth it to me.</p>



<a name="180523085"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/131828-t-compiler/topic/design%20meeting%202019-11-08/near/180523085" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/131828-t-compiler/topic/design.20meeting.202019-11-08.html#180523085">(Nov 12 2019 at 14:46)</a>:</h4>
<p>At least the one that appealed to me the most :)</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>